/**
 * 使用TS 解此题
 * 
 * 1.前缀
 * 2.公共的、相同的符号
 * 
 * 
 * 解答思路
 * 方式1：遍历数组
 * 方式2：正则 正向匹配是否可行？
 * 方式3：& | & 操作筛选出公共的参数是否可行。这种方式可能无法明确 前缀这个条件
 * 
 * 评论优秀解法
 * 1.取第一个字符串，找出第二个字符串的公共前缀，之后再通过此公共前缀继续找3、4..最终就是所有字符串的公共前缀了
 */

function longestCommonPrefix1(strs: string[]): string {

    if(strs.length==1) return strs[0];

    let commonStr = "";


    for(let i = 0; i < strs.length;i++){
        if(i==0){
            commonStr =  strs[i];
        }else{
            //取最短的
            let shortLength=commonStr.length<strs[i].length?commonStr.length:strs[i].length;
            if(shortLength==0){
                return "";
            }
            //遍历
            let index=0;
            while(index<shortLength){
                if( commonStr[index]!=strs[i][index]){
                    break;
                }else{
                    index++;
                }
            }

            commonStr = commonStr.substring(0,index);
        }
       
    }

    return commonStr;
};


/**
 * 评论优秀解法
 */
function longestCommonPrefix(strs: string[]): string {

    let commonStr = strs[0];
    let index :number  = 1;

    while(index<strs.length){
        
        //找公共前缀
        while(strs[index].indexOf(commonStr)!=0){//这句意思是，当匹配不为0表示不符合公共前缀，缩减commonStr继续匹配
            commonStr =  commonStr.substring(0,commonStr.length-1);//截掉最后一个字符，继续
        }
        
        index++;
    }


    return commonStr;
};